class Solution {
public:
/*
// 排序搜索
    int singleNumber(vector<int>& nums) {
        sort(nums.begin(), nums.end());  //对元素进行排序
        //除出现一次元素，其余每个元素都三次 
        for(int i = 0; i < nums.size(); i += 3){  
            if(i == nums.size()-1 || nums[i] != nums[i+1]){ 
                return nums[i]; 
            }
        }
        return 0;
    }
*/

// 位运算
    int singleNumber(vector<int>& nums) {
        int singlenum = 0;
        for(int i = 0; i < 32; ++i){
            int cnt = 0;
            int bit = 1 << i;  // 二进制第几位
            for(int j = 0; j < nums.size(); ++j){
                if(nums[j] & bit){  
                    cnt++;  // 所有数字的进制第 i 位的和
                }
            }
            if(cnt % 3){ // 余0(1)说明只出现一次的数字二进制第i个比特为0(1)
                // 所有结果组成只有一位那个数
                singlenum |= bit;
            }
        }
        return singlenum;
    }
};